package com.hhl.redis.subscribe;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.stereotype.Component;

import com.hhl.redis.entity.Notice;

/**
 * 说明：消息订阅--订阅者<br>
 * <h1>创 建 人: hehailong</h1>
 * 创建日期: 2021年1月4日 下午8:05:41<br>
 * redis 127.0.0.1:6379>SUBSCRIBE [channel]
 */
@Component
public class SubscriberMessageListener extends MessageListenerAdapter {

    public static final String TOPIC_NAME = "topicName";

    @Autowired
    @Qualifier("redisTemplate")
    private RedisTemplate redisTemplate;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        byte[] body = message.getBody();
        byte[] channel = message.getChannel();
        String topic = (String) redisTemplate.getStringSerializer().deserialize(channel);
        assert topic != null;
        if(!topic.equals(TOPIC_NAME)){
            return;
        }
        Object res = redisTemplate.getValueSerializer().deserialize(body);
        // 如果反序列化得到的是我们定义的消息数据体类型
        if(res instanceof Notice){
            Notice notice = (Notice)res;
            System.out.println("订阅者一号收到到的消息=====");
            System.out.println(notice);
        }else{
            System.out.println("其他业务处理");
        }
    }
}
